package fuentes;

import operaciones.Operacion0;
import operaciones.Operacion1;
import operaciones.Operacion10;
import operaciones.Operacion11;
import operaciones.Operacion12;
import operaciones.Operacion13;
import operaciones.Operacion14;
import operaciones.Operacion15;
import operaciones.Operacion16;
import operaciones.Operacion17;
import operaciones.Operacion2;
import operaciones.Operacion3;
import operaciones.Operacion5;
import operaciones.Operacion6;
import operaciones.Operacion7;
import operaciones.Operacion9;
import operaciones.OperacionAbstracta;

public class AnalizadorLexico {
	private int estado;
	private int estados[][];
	private OperacionAbstracta funciones[][];
	private Fuente fuente;
	private Procesos procesos;
	private Mensajes m;
	
	
	
	public AnalizadorLexico(String path){
		estado=0;
		fuente= new Fuente(path);
		procesos=new Procesos(fuente);
			
		
/**
 * Matriz de transicion de estados
 */
		int[][] mat1={{1,2,7,1,8,-1,-1,-1,-1,-1,-1,13,12,-1,11,0,0,0,-1,16},
				 {1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
				 {-1,2,3,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,14,-1,-1,-1},
				 {-1,4,-1,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
				 {-1,4,-1,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,14,-1,-1,-1},
				 {0,6,0,0,0,0,0,15,15,0,0,0,0,0,0,0,-1,0,0,0},
				 {-1,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
				 {0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
				 {-1,-1,-1,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
				 {9,9,9,9,9,9,10,9,9,9,9,9,9,9,9,9,9,9,0,9},
				 {9,9,9,9,0,9,9,9,9,9,9,9,9,9,9,9,9,9,0,9},
				 {0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0},
				 {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
				 {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
				 {-1,-1,-1,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,14,-1,-1,-1},
				 {0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
				 {16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,-1}};		
		OperacionAbstracta[][] mat2={

				{
				// Fila 0
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion7(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion7(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion7(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion7(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion7(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion7(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion7(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion10(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion17(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),},

				{
					// Fila 1	
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion2(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

				{
					// Fila 2
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

				{
					// Fila 3	
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

								 	  
				{
					// Fila 4
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

				{
					// Fila 5	
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

				{
					// Fila 6
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion5(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

				{
				// Fila 7	
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion11(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

				{
				// Fila 8	
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

				{
				//Fila 9	
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion13(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

				{
				//Fila 10	
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion0(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),					new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion13(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

				{
				//Fila 11	
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion7(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion14(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

				{
				//Fila 12	
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion7(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

				{
				//Fila 13	
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion7(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion7(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion6(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

				{
				//Fila 14	
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion16(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion3(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},

				{
				//Fila 15	
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion12(procesos.getBuffer(),procesos.getFuente(),m.getInstance())},
				
				{
				// Fila 16
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion1(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion15(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion15(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),
				new Operacion9(procesos.getBuffer(),procesos.getFuente(),m.getInstance()),},
		};
		estados=mat1;
		funciones=mat2;
		
	}

	private int getColumna(String a){
		switch (a.charAt(0))
		{
		case 'e': return 3;
		case 'E': return 3;
		case '.': return 2;
		case '/': {if (a.length()>1) if (a.charAt(1)=='n') return 17;
				  if (a.length()>1) if (a.charAt(1)=='e')return 18;
				  return 9;
				  }
		case '*': return 4;
		case '+': return 7;
		case '-': return 8;
		case '>': return 12;
		case '<': return 11;
		case ':': return 14;
		case '=': return 10;
		case '{': return 13;
		case '}': return 13;
		case '(': return 5;
		case ')': return 6;
		//case '[': return 12;
		//case ']': return 12;
		case ',': return 13;
		case ';': return 13;
		case ' ': return 16;
		case '	': return 16;
		case '\'': return 19;

		
		}
		Character ch=new Character(a.charAt(0));
		if (ch.isLetter(ch)) return 0;
		if (ch.isDigit(ch)) return 1;
		return 15;
	}
	
	public Token yylex(){
		Token tok = null;
		TablaSimbolos tabla=TablaSimbolos.getInstance();
		while (estado!=-1){
			long nro_linea=fuente.getLinea();
			String a=fuente.getCaracter();
			int col=getColumna(a);
			procesos.setOperacion(funciones[estado][col]);
			tok=procesos.ejecutar(a.charAt(0),nro_linea);
			if ((tok!=null)&&(tok.getTipo().equals("ERROR")))
			estado=0;
			else
			estado=estados[estado][col];
		}
		
		estado=0;
		
		return tok;
	}
	
	public long getLinea()
	{
		return fuente.getLinea();
	}
	public void setFuente(String path){
		fuente = new Fuente(path);
	}

}
	
	